package algo3c3g3.model.action;

import algo3c3g3.model.material.*;
import algo3c3g3.model.*;
import org.jdom.Element;

import algo3c3g3.model.persistence.Persistence;

/**
 * La unidad se queda quieta e impide el paso de otras unidades.
 */
public class Blocker extends Action
{
    private boolean hasInvisibleBlock = false;
    
    public void perform(Unit unit)
    {
        // Cuando una unidad se hace Blocker, se construye un bloque invisible
        // en su posicion para bloquear a otras unidades.
        if(!hasInvisibleBlock)
        {
            unit.getOwnerMap().replaceBlock(unit.getPosition(), MaterialFactory.getInstance(Material.INVISIBLE_BLOCK));
            hasInvisibleBlock = true;
        }
    }
    
    @Override
    public void dispose(Unit unit)
    {
        if(hasInvisibleBlock)
            unit.getOwnerMap().replaceBlock(unit.getPosition(), MaterialFactory.getInstance(Material.AIR));
    }
    
    @Override
    public Element save()
    {
        Element root = super.save();

        Element e = new Element("hasInvisibleBlock");
        e.addContent(Boolean.toString(this.hasInvisibleBlock));
        root.addContent(e);

        return root;
    }

    @Override
    public void load(Element e)
    {
        this.hasInvisibleBlock =
            new Boolean(e.getChildText("hasInvisibleBlock")).booleanValue();
    }

    
    
    public static void main(String[] args)
    {
        System.out.println();
        
        World world = new World(new Coord(2, 5), null, new TestMaps.TestWalkerMap());
        
        System.out.println("Mapa:");
        world.printMap();
        
        world.addUnit();
        
        Unit unit1 = world.getUnit(0);
        
        System.out.println("\nNueva unidad:");
        unit1.printStatus();
        
        Blocker blocker=new Blocker();
        
        System.out.println("\nCaminando hacia la derecha:");
        for(int i = 0; i < 15; i++)
        {
            world.moveUnits();
            unit1.printStatus();
            
            if(unit1.getXPosition() == 10)
            {
            	blocker=new Blocker();
                unit1.setAction(blocker);
                System.out.println("\nUnidad 1 cambia a Blocker()");
                break;
            }
        }
        
        System.out.println("\nUnidad 2:");
        world.addUnit();
        Unit unit2 = world.getUnit(1);
        unit2.printStatus();
        
        System.out.println("\nCaminando hacia la derecha:");
        for(int i = 0; i < 15; i++)
        {
            world.moveUnits();
            
            unit1.printStatus();
            unit2.printStatus();
        }
        
        System.out.println();
        
        Persistence.toXMLFile(blocker.save(),"C:\\salida.xml");
    }
}
